vpnScript - HTB
Visita a Unkn0wn1122!!
Descripción
Este script en Bash automatiza las tareas de conexión y desconexión de una VPN utilizando OpenVPN para Hack The Box. También permite copiar la dirección IP asignada a la interfaz tun al portapapeles. Es ideal para entornos donde es necesario establecer conexiones seguras de manera eficiente y sin intervención manual.
Funcionalidades del Script
- Gestión de Conexiones: Establece o cierra la conexión con un archivo de configuración
.ovpn
detectado automáticamente. - Creación de Interfaz tun: Verifica y configura la interfaz de red necesaria para OpenVPN.
- Soporte para Distros: Compatible con sistemas basados en Debian y Arch para instalación automática de OpenVPN.
- Copia de IP: Copia la IP asignada a la interfaz tun al portapapeles para un acceso rápido.
- Interfaz Amigable: Incluye un panel de ayuda accesible con
-h
.
Situación de uso
Para utilizar este script, asegúrate de que OpenVPN esté instalado o deja que el script lo instale automáticamente. Coloca el archivo de configuración .ovpn
en un directorio accesible.
El script se asegura de comprobar si ya hay una conexión VPN activa y, si no existe, establece una nueva. En caso de desconexión, elimina cualquier proceso de VPN en ejecución y desactiva la interfaz
tun
.
Opciones Disponibles
- -c: Inicia la conexión VPN.
- -d: Finaliza la conexión VPN.
- -i: Copia la dirección IP de la VPN al portapapeles.
- -h: Muestra el panel de ayuda.
Iniciar conexión VPN
./vpnConnection.sh -c
Desconectar VPN
./vpnConnection.sh -d
Copiar IP de la VPN al portapapeles
./vpnConnection.sh -i
Mostrar ayuda
./vpnConnection.sh -h
Código del Script
#!/bin/bash
#autor: Unkn0wn1122
#helper: liandd
#Colours
greenColour="\e[0;32m"
endColour="\033[0m\e[0m"
redColour="\e[0;31m"
blueColour="\e[0;34m"
yellowColour="\e[0;33m"
purpleColour="\e[0;35m"
turquoiseColour="\e[0;36m"
grayColour="\e[0;37m"
function ctrl_c() {
echo -e "\n${redColour}[!] Bye...${endColour}\n"
tput cnorm && exit 1
}
# Ctrl + c
trap ctrl_c INT
function helpPanel() {
echo -e "\n\n${grayColour}Usage:${endColour} ${yellowColour}./vpnConnection.sh < -c >, < -d >, < -h >${endColour}
${purpleColour}-c${endColour} ${yellowColour}[*]${endColour} ${grayColour}Start Connection with the vpn${endColour}
${purpleColour}-d${endColour} ${yellowColour}[*]${endColour} ${grayColour}Close Connection${endColour}
${purpleColour}-i${endColour} ${yellowColour}[*]${endColour} ${grayColour}Copy VPN ip to clipboard${endColour}
${purpleColour}-h${endColour} ${yellowColour}[*]${endColour} ${grayColour}This help panel${endColour}\n\n"
}
function checkerForTun() {
clear
echo -e "\n${yellowColour}[+]${endColour} ${grayColour}Starting checker for tun Interface...${endColour}"
ip_check=$(ip -4 -o addr show | grep 'tun' | grep '10\.')
if [[ -n "$ip_check" ]]; then
echo -e "\n${redColour}[!] There is a VPN instance already running.${endColour}\n"
exit 1
else
checker=$(ip link | grep 'tun')
if [[ "$?" -eq 1 ]]; then
echo -e "\n${redColour}[!] There is no tun Interface available..${endColour}\n\n${yellowColour}[!]${endColour} ${grayColour}Setting${endColour} ${blueColour}tun0${endColour} ${grayColour}Interface on...${endColour}"
createTUN=$(sudo ip tuntap add mode tun tun0)
psId3=$!
wait $psId3
else
echo -e "\n${yellowColour}[+]${endColour} ${grayColour}Checker done...${endColour}"
fi
fi
}
function connect() {
checkerForTun
ovpnFile=$(find / -type f -name 'lab_*.ovpn' 2>/dev/null &)
psId1=$!
wait $psId1
command -v openvpn >/dev/null 2>&1 || {
echo -e "\n${redColour}[!] I requiere "openvpn" package...\n${endColour}";
echo -e "${yellowColour}[*]${endColour} ${grayColour}Do you want to install this package? -> ${endColour}${grayColour}"${endColour}${redColour}openvpn${endColour}${grayColour}"${endColour}"
read -r -p "Are you sure? [y/N] :" response
response=${response,,}
if [[ "$response" =~ ^(yes|y)$ ]]; then
if [[ -x "$(command -v apt)" ]]; then
echo -e "\n${blueColour}[+] installing...${endColour}"
installed=$(sudo apt install openvpn -y)
psId2=$!
wait $psId2
echo -e "\n${purpleColour}[*] Succesfully installed in debian based!${endColour}\n"
sleep 1.9
clear
elif [[ -x "$(command -v pacman)" ]]; then
echo -e "\n${blueColour}[+] installing...${endColour}"
installed=$(sudo pacman -Sy openvpn)
ps2Id=$!
wait $psId2
echo -e "\n${purpleColour}[*] Succesfully installed in arch based!${endColour}\n"
sleep 1.9
clear
fi
else
echo -e "\n${redColour}[!] No package installed... aborting!\n ${endColour}"
exit 1
fi
}
sleep 1.1
clear
echo -e "\n${yellowColour}[+]${endColour} ${grayColour}Starting connection....${endColour}"
sleep 1.5
check=$(
sudo openvpn --config $ovpnFile --dev tun0 --daemon >/dev/null 2>&1
echo $?
)
if [ "$check" -eq 0 ]; then
echo -e "\n${yellowColour}[+]${endColour} ${grayColour}Established connection${endColour}\n"
else
echo -e "\n${redColour}[!] Connection could not be established${endColour}\n"
fi
}
function disconnect() {
psId=$(pgrep openvpn 2>/dev/null)
check=$(
sudo kill $psId 2>/dev/null
echo $?
)
if [ "$check" -eq 0 ]; then
clear
echo -e "\n${yellowColour}[+]${endColour} ${grayColour}Turning off connection....${endColour}\n"
sleep 1.5
checker=$(ip link | grep 'tun0')
if [[ "$?" -eq 0 ]]; then
sudo ip link delete tun0
fi
else
clear
echo -e "\n${redColour}[!] There is not an openvpn process running...${endColour}\n"
fi
}
function copyIp() {
checker=$(ip link | grep 'tun')
if [[ "$?" -eq 1 ]]; then
clear
echo -e "\n${yellowColour}[!]${endColour} ${grayColour}Script is not running...${endColour}\n"
echo -e "${redColour}[!] Aborting!${endColour}"
exit 1
else
ip=$(ifconfig | grep "inet 10" | awk '{print $2}')
clear
echo $ip | tr -d '\n' | xclip -sel clip
echo -e "\n${blueColour}[+] IP address copied to clipboard${endcolour}\n"
fi
}
declare -i parameter_counter=0
while getopts "cdih:" arg; do
case $arg in
c) let parameter_counter+=1 ;;
d) let parameter_counter+=2 ;;
i) let parameter_counter+=3 ;;
h) let parameter_counter+=4 ;;
esac
done
if [ $parameter_counter -eq 1 ]; then
connect
elif [ $parameter_counter -eq 2 ]; then
disconnect
elif [ $parameter_counter -eq 3 ]; then
copyIp
elif [ $parameter_counter -eq 4 ]; then
helpPanel
else
helpPanel
fi
Conclusión
Este script simplifica la gestión de conexiones VPN, proporcionando un manejo automatizado y eficiente de la interfaz tun y las configuraciones de VPN.
Esta publicación ha sido creada como parte del aprendizaje en Bash y scripting avanzado. Todos los creditos para Unkn0wn1122.
© Unkn0wn1122 & liandd